package resty.tedu.case01;

import javax.swing.*;
import java.awt.*;
import java.util.Random;

/**
 * <p>当前类的实现是一个满天星的游戏
 * @since 
 * <p>前置条件:
 * <ul>
 *     <li>面向对象的简单认识</li>
 *     <li>数组的简单认识</li>
 *     <li>线程的简单认识</li>
 *     <li>Color类的学习</li>
 *     <li>Font类的学习</li>
 *  </ul>
 *  <p>实现流程:</p>
 *  <pre>
 *     1.创建一个窗体类 
 *          1.1设置窗体大小
 *          1.2设置窗体位置
 *          1.3设置窗体的标题
 *     2.创建一个画板类
 *          2.1创建一个数组并通过随机数赋值
 *          2.2画板中画星星
 *     3.将画板添加进窗体类里面
 *     4.添加一个线程进来
 *      让main线程启动的时候,让星星动起来.
 *     
 *  </pre>   
 *     
 * 
 */

public class Demo1 {

    public void init(){
        JFrame jf = new JFrame();                   //实例化一个窗体  1
            jf.setSize(800,700);            //设置窗体的大小   1.1
            jf.setLocation(800,400);                //设置窗体的位置   1.2
            jf.setTitle("满天星");                       //设置窗体的标题   1.3
        DemoPanel1 dp = new DemoPanel1();             //创建一个窗体类    2
        jf.add(dp);                                 //窗体添加画板 3
        Thread t = new Thread(dp);//启动一个线程  4
        t.start();
        //更改一下代码
        /**以上的代码执行都是在内存中实现的.并没有显示在屏幕当中.*/
        jf.setVisible(true);//设置可视化
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置点击关闭时退出虚拟机
        
    }

    public static void main(String[] args) {
       Demo1 demo = new Demo1();//将当前代码放入内存中.
       demo.init();//调用init()方法
    }
}

/**
 * 创建一个画板类  2
 */
class DemoPanel1 extends  JPanel implements  Runnable{
    Random ran ;//声明一个随机数
    int [] xs ;//声明一个X坐标的数组
    int [] ys ;//声明一个Y坐标的数组
    public DemoPanel1(){
        ran = new Random();//实例化一个随机数
        xs = new int[300];
        ys = new int[300];
        /**让随机数生成在范围内的随机数值*/
        for (int i = 0; i < xs.length; i++) {
            xs[i] = ran.nextInt(800);
            ys[i] = ran.nextInt(700);
        }
    }



    @Override
    public void paint(Graphics g) {
        super.paint(g);
        this.setBackground(Color.BLACK);
        /**画出星星,坐标是构造器中已赋值的X坐标及Y坐标.*/
        for (int i = 0; i < xs.length; i++) {
            Color c = new Color(ran.nextInt(255),ran.nextInt(255),ran.nextInt(255));
            g.setColor(c);//设置画笔颜色
            g.drawString("*",xs[i],ys[i]);
        }
        
    }

    @Override
    public void run() {
        while(true){
            /**让每一个星得都动起来*/
            for (int i = 0; i < xs.length; i++) {
                ys[i]+=5;
                if (ys[i] >=700) {
                    ys[i] = 23;
                }
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            repaint();
        }
    }
} 
